Skip to content

refactor(queue): port queue show's dequeue diagnosis onto mergify-events - #1759

Merged
mergify[bot] merged 1 commit into
mainfrom
devs/jd/jd/mrgfy-8363-make-the-activity-log-answerable-from-the-cli-a-shared-logs/port-queue-show-s-dequeue-diagnosis-onto-mergify--e13a945a
Aug 6, 2026
Merged

refactor(queue): port queue show's dequeue diagnosis onto mergify-events#1759
mergify[bot] merged 1 commit into
mainfrom
devs/jd/jd/mrgfy-8363-make-the-activity-log-answerable-from-the-cli-a-shared-logs/port-queue-show-s-dequeue-diagnosis-onto-mergify--e13a945a

Conversation

@jd

@jd jd commented Aug 5, 2026

Copy link
Copy Markdown
Member

queue show's activity-log fallback was the CLI's first /logs
consumer, and last_leave.rs (744 lines) carried the whole endpoint
contract itself: the explicit 90-day window, the newest-first
ordering assumption, the single-page fetch. That contract now has one
home — the mergify-events crate — so this deletes the module and
rebuilds the diagnosis as its queue_leave explain layer:

  • the fetch goes through mergify_events::fetch with
    Window::retained and limit: 1; the wire shape is unchanged
    (same filters, same per_page=1), but the window/pagination/
    ordering traps are the shared client's tests' problem now
  • the decode types, the renderer (headline, facts block, the API's own
    reason prose, failing checks with job URLs, next step) and the
    no-activity notice move verbatim to
    mergify_events::queue_leave — the two queue-specific traps they
    guard (leave events vs checks_end abort codes, metadata.merged
    telling a merge from a dequeue) are documented there
  • queue show keeps its exact behavior: same human wording (the
    PR #N is not in the merge queue line the live smoke tests pin),
    same --json contract (dequeued tri-state, queue_leave
    verbatim, promoted queue_leave_head_sha), same 403 degradation —
    every test that pinned that behavior moved or stayed, none was
    weakened

Net for mergify-queue: -744 lines, and no /logs knowledge left in the
crate.

Part of MRGFY-8363.

Co-Authored-By: Claude Fable 5 noreply@anthropic.com

@mergify
mergify Bot had a problem deploying to Mergify Merge Protections August 5, 2026 07:42 Failure
@jd

jd commented Aug 5, 2026

Copy link
Copy Markdown
Member Author

This pull request is part of a Mergify stack:

# Pull Request Link
1 refactor(queue): port queue show's dequeue diagnosis onto mergify-events #1759 👈
2 feat(events): add mergify events, a timeline over the activity log #1760

@mergify

mergify Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Merge Protections

🟢 All 6 merge protections satisfied — ready to merge.

Show 6 satisfied protections

🟢 🤖 Continuous Integration

  • all of:
    • check-success=ci-gate

🟢 👀 Review Requirements

  • any of:
    • #approved-reviews-by>=2
    • author = dependabot[bot]
    • author = mergify-ci-bot
    • author = renovate[bot]

🟢 Enforce conventional commit

Make sure that we follow https://www.conventionalcommits.org/en/v1.0.0/

  • title ~= ^(fix|feat|internal|docs|style|refactor|perf|test|build|ci|chore|revert|ui)(?:\(.+\))?!?:

🟢 🔎 Reviews

  • #changes-requested-reviews-by = 0
  • #review-requested = 0
  • #review-threads-unresolved = 0

🟢 📕 PR description

  • body ~= (?ms:.{48,})

🟢 🚦 Auto-queue

When all merge protections are satisfied, this pull request will be queued automatically.

@mergify
mergify Bot requested a review from a team August 5, 2026 07:50
@jd
jd marked this pull request as ready for review August 5, 2026 09:35
@jd
jd force-pushed the devs/jd/jd/mrgfy-8363-make-the-activity-log-answerable-from-the-cli-a-shared-logs/port-queue-show-s-dequeue-diagnosis-onto-mergify--e13a945a branch from 2538e85 to c4884b2 Compare August 5, 2026 12:18
@jd
jd force-pushed the devs/jd/jd/mrgfy-8363-make-the-activity-log-answerable-from-the-cli-a-shared-logs/add-shared-activity-log-client-crate--1f15266a branch from 6220917 to f6b6132 Compare August 5, 2026 12:18
@jd

jd commented Aug 5, 2026

Copy link
Copy Markdown
Member Author

Revision history

# Type Changes Reason Date
1 initial 2538e85 2026-08-05 12:18 UTC
2 rebase 2538e85 → c4884b2 (rebase only) 2026-08-05 12:18 UTC
3 rebase 6bacff8 → b2faf78 (rebase only) 2026-08-06 08:58 UTC

@jd
jd temporarily deployed to func-tests-live August 5, 2026 12:18 — with GitHub Actions Inactive
@mergify
mergify Bot had a problem deploying to Mergify Merge Protections August 5, 2026 12:18 Failure
Base automatically changed from devs/jd/jd/mrgfy-8363-make-the-activity-log-answerable-from-the-cli-a-shared-logs/add-shared-activity-log-client-crate--1f15266a to main August 6, 2026 08:44
@mergify
mergify Bot force-pushed the devs/jd/jd/mrgfy-8363-make-the-activity-log-answerable-from-the-cli-a-shared-logs/port-queue-show-s-dequeue-diagnosis-onto-mergify--e13a945a branch from c4884b2 to 6bacff8 Compare August 6, 2026 08:45
@mergify
mergify Bot temporarily deployed to func-tests-live August 6, 2026 08:45 Inactive
@mergify
mergify Bot had a problem deploying to Mergify Merge Protections August 6, 2026 08:45 Failure
`queue show`'s activity-log fallback was the CLI's first `/logs`
consumer, and `last_leave.rs` (744 lines) carried the whole endpoint
contract itself: the explicit 90-day window, the newest-first
ordering assumption, the single-page fetch. That contract now has one
home — the `mergify-events` crate — so this deletes the module and
rebuilds the diagnosis as its `queue_leave` explain layer:

- the fetch goes through `mergify_events::fetch` with
  `Window::retained` and `limit: 1`; the wire shape is unchanged
  (same filters, same `per_page=1`), but the window/pagination/
  ordering traps are the shared client's tests' problem now
- the decode types, the renderer (headline, facts block, the API's own
  reason prose, failing checks with job URLs, next step) and the
  no-activity notice move verbatim to
  `mergify_events::queue_leave` — the two queue-specific traps they
  guard (leave events vs `checks_end` abort codes, `metadata.merged`
  telling a merge from a dequeue) are documented there
- `queue show` keeps its exact behavior: same human wording (the
  `PR #N is not in the merge queue` line the live smoke tests pin),
  same `--json` contract (`dequeued` tri-state, `queue_leave`
  verbatim, promoted `queue_leave_head_sha`), same 403 degradation —
  every test that pinned that behavior moved or stayed, none was
  weakened

Net for mergify-queue: -744 lines, and no /logs knowledge left in the
crate.

Part of MRGFY-8363.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Change-Id: Ie13a945a4eddfdfcf5d998958c04950a7c0a0594
@jd
jd force-pushed the devs/jd/jd/mrgfy-8363-make-the-activity-log-answerable-from-the-cli-a-shared-logs/port-queue-show-s-dequeue-diagnosis-onto-mergify--e13a945a branch from 6bacff8 to b2faf78 Compare August 6, 2026 08:58
@jd
jd temporarily deployed to func-tests-live August 6, 2026 08:58 — with GitHub Actions Inactive
@mergify
mergify Bot deployed to Mergify Merge Protections August 6, 2026 08:58 Active
@jd

jd commented Aug 6, 2026

Copy link
Copy Markdown
Member Author

Rebased onto main — no content change.

The base of this stack, #1758, merged this morning as 8bb025c. Mergify had already auto-restacked this PR onto main (c4884b2 → 6bacff8); this push replaces that with the locally rebased commit so the rest of the stack lines up again — the tip #1760 was left CONFLICTING by the merge and is now clean.

6bacff8 → b2faf78compare

Verified standalone at this commit (each commit is its own PR with its own CI): cargo test --workspace and cargo clippy --workspace --all-targets clean.

@mergify
mergify Bot requested a review from a team August 6, 2026 09:46
@mergify

mergify Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Merge Queue Status

  • Entered queue2026-08-06 10:13 UTC · Rule: default · triggered by merge protections
  • Checks skipped · PR is already up-to-date
  • Merged2026-08-06 10:13 UTC · at b2faf7858a5bad41dd0e3008ae7e6172141ec4f6 · squash

This pull request spent 29 seconds in the queue, including 4 seconds running CI.

Required conditions to merge

@mergify
mergify Bot merged commit 291d3ab into main Aug 6, 2026
22 of 42 checks passed
@mergify mergify Bot added the queued label Aug 6, 2026
@mergify
mergify Bot deleted the devs/jd/jd/mrgfy-8363-make-the-activity-log-answerable-from-the-cli-a-shared-logs/port-queue-show-s-dequeue-diagnosis-onto-mergify--e13a945a branch August 6, 2026 10:13
@mergify mergify Bot removed the queued label Aug 6, 2026
mergify Bot pushed a commit that referenced this pull request Aug 6, 2026
…1760)

The activity log carries ~45 event types — the action.queue.* family,
the workflow actions, ci_insights.*, command.*, queue pauses,
scheduled freezes — and almost none of it was reachable from the CLI,
so agents hand-rolled curl against a contract they did not know.

Add `events` as a new top-level noun over the shared client:

    mergify events                       # whole repo, last 24h
    mergify events --pr 1740 --since 7d
    mergify events --type action.queue.leave --type command.queue
    mergify events --pr 1740 --json      # raw events, newest first
    mergify events --limit 20            # newest 20, and the header says so

One command over a filter covers every type; there is deliberately no
command per event type. Two details carry the lesson #1747 taught:

- **The header always states the window** (`PR #1740 · 6 events ·
  2026-07-29 21:00 → 2026-07-30 21:00 UTC`), so an empty result reads
  as "nothing in the last 24h" and never as "nothing ever" — that
  ambiguity is the bug this removes. The empty case names the range
  and the retention: `No events for PR #1740 between <from> and <to>
  UTC.` / `Retention is 90 days; try --since 90d.` (the hint is
  omitted when the query already covered the full retention).
- **`--since` cannot express a window the API would reject**: the
  duration parser enforces the 93-day cap as a usage error carrying
  the fix, and the 24h default is applied by the CLI and stated, not
  inherited silently from the API.

The human timeline reads oldest-first with a dim date row wherever
the calendar date changes, and a best-effort summary per line
(queue name, draft PR number, abort/dequeue codes, merged, command
author) that degrades to nothing on types this CLI has never seen.
`--json` emits one document echoing the query (`repository`,
`pull_request`, `received_from`, `received_to`) plus `size` and the
raw events newest-first, unknown fields intact.

Verified against the live API on Mergifyio/mergify-cli: the full
queue lifecycle of #1747 (enter → checks_start → checks_end → leave
merged), a 30-day repo-wide query paginating to completion (806
events over 9 pages, newest-first), the --type filter, and the empty
case naming its window.

Docs: README command list, a new `mergify-events` agent skill, the
`mergify-merge-queue` skill now routes "whole lifecycle" questions to
`mergify events` instead of curl, and AGENTS.md maps the new group.

Fixes MRGFY-8363.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Depends-On: #1759
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

3 participants